package com.smartcommunity.dao.facelib;

import com.smartcommunity.entity.facelib.FaceLib;
import com.smartcommunity.entity.facelib.FaceLibPerson;
import com.smartcommunity.entity.facelib.FaceLibPersonFeature;
import com.smartcommunity.entity.facelib.FaceLibPersonTag;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

@Component
public interface FaceLibDao {


    /***
     * 获取人像库列表
     * */
    List<FaceLib> selectFaceLib(FaceLib faceLib);

    /**
     * 新建人像库
     */
    int insertFaceLib(FaceLib param);

    int updateFaceLib(FaceLib param);

    int updateFaceLibTotal(FaceLib param);

    //删除库
    int deleteFaceLibByIds(FaceLib faceLib);

    List<FaceLibPerson> selectFaceLibPerson(FaceLibPerson faceLibPerson);

    List<FaceLibPerson> selectFaceLibPersonByLibIdAndIdCardNo(FaceLibPerson faceLibPerson);

    /**
     * @description: 添加人脸库人员信息，同时会分析和保存人员标签
     * @param person 人员
     * @return 数据库操作结果
     */
    int insertFaceLibPerson(FaceLibPerson person);

    /**
    　* @description: 更新人脸库人员信息。注意: ID不能为空。
    　* @param 更新参数
    　* @return 数据库操作结果
      * @author 田宗兵
      * @date 2020/02/17
    　*/
    int updateFaceLibPerson(FaceLibPerson person);

    /**
    　* @description: 根据ID删除人脸库人员信息。注意：ID可以是逗号分隔的多个序号
    　* @param 删除参数
    　* @return 数据库删除的结果(记录数量)
    　* @author 田宗兵
    　* @date 2020/02/17
    　*/
    int deleteFaceLibPersonByIds(FaceLibPerson faceLibPerson);

    /**
     　* @description: 根据LibId删除人脸库人员信息。注意：ID可以是逗号分隔的多个序号
     　* @param 删除参数
     　* @return 数据库删除的结果(记录数量)
     　* @author 田宗兵
     　* @date 2020/02/17
     　*/
    int deleteFaceLibPersonByLibId(FaceLibPerson faceLibPerson);

    List<FaceLibPersonTag> selectTagList(FaceLibPersonTag tagParam);

    int insertTagList(FaceLibPerson tagParam);

    int deleteTag (FaceLibPersonTag tag);


    /**
     * 列表查询人脸库人脸特征记录
     */
    List<FaceLibPersonFeature> selectFaceFeatureList(FaceLibPersonFeature param);

    int insertFaceFeatureList(List<FaceLibPersonFeature> list);

    int deleteFaceFeatures(FaceLibPersonFeature param);

    int deleteFaceFeaturesByLibId(String libId);

    int countFaceLibPerson(FaceLibPerson faceLibPerson);

    FaceLib selectLibById(@Param("id") String id);

    List<FaceLibPerson> selectPersonByLibId(String libId);

    void updateTagByaLib(@Param("lib") FaceLib lib,@Param("org") FaceLib orgLib);

    int updateFaceLibPersonPic(List<FaceLibPerson> list);
}
